package org.study.test.system;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 参考 https://blog.csdn.net/weixin_31530761/article/details/113216956
 *
 * @author doveylovey
 * @version v1.0.0
 * @email 1135782208@qq.com
 * @date 2023年03月31日
 */
public interface ShowMapper {
    /**
     * 显示 mysql 中所有数据库的名称
     *
     * @param
     * @return java.util.List<java.lang.String>
     * @throws
     **/
    List<String> showDatabases();

    /**
     * 查询当前数据库中的所有表名称：show tables;
     *
     * @param
     * @return java.util.List<java.lang.String>
     * @throws
     **/
    List<String> showTables1();

    /**
     * 查询指定数据库中的所有表名称：show tables from ${databaseName}
     *
     * @param databaseName
     * @return java.util.List<java.lang.String>
     * @throws
     **/
    List<String> showTables2(@Param("databaseName") String databaseName);

    /**
     * 模糊查询当前数据库中的表名称：show tables like #{tableName};
     *
     * @param tableName
     * @return java.util.List<java.lang.String>
     * @throws
     **/
    List<String> showTables3(@Param("tableName") String tableName);

    /**
     * 查询当前数据库中每个表的详细信息
     * show table status [from database_name];
     *
     * @param
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.String>>
     * @throws
     **/
    List<Map<String, String>> showTables4();

    /**
     * 查询指定数据库中每个表的详细信息
     * show table status [from database_name];
     *
     * @param schemaName
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.String>>
     * @throws
     **/
    List<Map<String, String>> showTables5(@Param("schemaName") String schemaName);

    /**
     * 查询系统中正在运行的所有进程(即当前正在执行的查询)，大多数用户可以查看他们自己的进程，
     * 但如果他们拥有 process 权限，就可以查看所有人的进程(包括密码)。
     *
     * @param
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.String>>
     * @throws
     **/
    List<Map<String, String>> showProcessList();

    /**
     * 显示当前数据库中指定表的列名称(和 desc table_name 命令的效果是一样的)
     * show [full] columns from table_name [from database_name];
     * show [full] columns from [database_name.]table_name;
     * show [full] fields from [database_name.]table_name;
     *
     * @param tableName
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.String>>
     * @throws
     **/
    List<Map<String, String>> showCurrentColumns(@Param("tableName") String tableName);

    /**
     * 显示指定数据库中指定表的列名称(和 desc table_name 命令的效果是一样的)
     * show columns from table_name [from database_name];
     * show columns from [database_name.]table_name;
     * show fields from [database_name.]table_name;
     *
     * @param schemaName
     * @param tableName
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.String>>
     * @throws
     **/
    List<Map<String, String>> showColumns(@Param("schemaName") String schemaName, @Param("tableName") String tableName);

    /**
     * 使用 information_schema 查询表是否存在
     *
     * @param schemaName
     * @param tableName
     * @return java.lang.Integer
     * @throws
     **/
    Integer selectTableFromSchema(@Param("schemaName") String schemaName, @Param("tableName") String tableName);
}
